package org.example.classtopia.Repository;

import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Page;
import org.example.classtopia.Model.Entity.UserMessage;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

@Service
@Component
@Repository
public interface MessageRepository extends JpaRepository<UserMessage, Long> {
    /**
     * 根据用户ID获取所有消息（分页），按时间倒序排列（排序由Service层PageRequest指定）
     */
    Page<UserMessage> findByUserId(Long userId, Pageable pageable);
    
    /**
     * 根据用户ID和已读状态获取消息（分页），按时间倒序排列（排序由Service层PageRequest指定）
     * @param userId 用户ID
     * @param isRead 已读状态：0-未读，1-已读
     * @param pageable 分页参数
     * @return 分页的用户消息列表
     */
    Page<UserMessage> findByUserIdAndIsRead(Long userId, short isRead, Pageable pageable);
    
    /**
     * 根据用户ID和多种消息类型获取消息（分页）
     * @param userId 用户ID
     * @param messageTypes 消息类型数组
     * @param pageable 分页参数
     * @return 分页的用户消息列表
     */
    Page<UserMessage> findByUserIdAndMessageTypeIn(Long userId, String[] messageTypes, Pageable pageable);
    
    /**
     * 根据用户ID、已读状态和多种消息类型获取消息（分页）
     * @param userId 用户ID
     * @param isRead 已读状态：0-未读，1-已读
     * @param messageTypes 消息类型数组
     * @param pageable 分页参数
     * @return 分页的用户消息列表
     */
    Page<UserMessage> findByUserIdAndIsReadAndMessageTypeIn(Long userId, short isRead, String[] messageTypes, Pageable pageable);
}
